package tur.br.moradadosol.dao.implementacao;

import java.sql.Connection;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import org.apache.log4j.Logger;

import tur.br.moradadosol.dao.ApartamentoDAO;
import tur.br.moradadosol.dao.DAOFactory;
import tur.br.moradadosol.dao.HospedagemDAO;
import tur.br.moradadosol.dao.HospedeDAO;
import tur.br.moradadosol.dao.MensagemDAO;
import tur.br.moradadosol.dao.PesquisaDAO;
import tur.br.moradadosol.dao.TipoDespesaDAO;
import tur.br.moradadosol.dao.UsuarioDAO;
import tur.br.moradadosol.dao.ValorDiariaDAO;
import tur.br.moradadosol.util.Constantes;

public class SQLDAOFactory extends DAOFactory {
	
	private Connection connection;
	
	public static Logger logger = Logger.getLogger(SQLDAOFactory.class);
	
	public SQLDAOFactory() throws Exception {
		
		//Class.forName("com.mysql.jdbc.Driver").newInstance();
		
		//connection = DriverManager.getConnection("jdbc:mysql://mysql01.moradadosol.tur.br/moradadosol?user=moradadosol&password=rfg21061983");
		//connection = DriverManager.getConnection("jdbc:mysql://localhost/moradadosol?user=root&password=root");
		
		logger.setLevel(Constantes.LOGGER_LEVEL);
		
		try {
			
			Context ctx = (Context) new InitialContext().lookup("java:comp/env");
			DataSource dataSource = (DataSource)ctx.lookup("jdbc/moradadosol");
			
			connection = dataSource.getConnection();
			
		} catch (Exception e) {
			logger.error("Erro ao obter SQLDAOFactory", e);
			throw e;
		}
	}
	
	public ApartamentoDAO getApartamentoDAO() {
		return new SQLApartamentoDAO(connection);
	}

	public HospedagemDAO getHospedagemDAO() {
		return new SQLHospedagemDAO(connection);
	}

	public HospedeDAO getHospedeDAO() {
		return new SQLHospedeDAO(connection);
	}
	
	public TipoDespesaDAO getTipoDespesaDAO() {
		return new SQLTipoDespesaDAO(connection);
	}
	
	public ValorDiariaDAO getDiariaDAO() {
		return new SQLValorDiariaDAO(connection);
	}

	public MensagemDAO getMensagemDAO() {
		return new SQLMensagemDAO(connection); 
	}

	public UsuarioDAO getUsuarioDAO() {
		return new SQLUsuarioDAO(connection);
	}

	public PesquisaDAO getPesquisaDAO() {
		return new SQLPesquisaDAO(connection);
	}
	
	
}
